/// <reference path="node_modules/@types/chrome/index.d.ts"/>

var color = '#3aa757';
// 首次安装时触发
chrome.runtime.onInstalled.addListener(function () {
    chrome.storage.sync.set({ color: color });
    console.log('Default background color set to %cgreen', "color: ".concat(color));
});
// 必须有接收终端
chrome.runtime.onConnect.addListener(function (devToolsConnection) {
    // assign the listener function to a variable so we can remove it later
    // var devToolsListener = function (message: any, sender, sendResponse) {
    //     // Inject a content script into the identified tab
    //     chrome.scripting.executeScript(message.tabId, { file: message.scriptToInject });
    // }
    // // add the listener
    // devToolsConnection.onMessage.addListener(devToolsListener);
    // devToolsConnection.onDisconnect.addListener(function () {
    //     devToolsConnection.onMessage.removeListener(devToolsListener);
    // });
});

// chrome.webRequest.onCompleted.addListener(
//     function (details) {
//         // console.info("URL: " + details.url);
//         // for (var i = 0; i < details.requestHeaders.length; ++i) {
//         //     if (details.requestHeaders[i].name === 'User-Agent') {
//         //         details.requestHeaders.splice(i, 1);
//         //         break;
//         //     }
//         // }
//     },
//     {
//         urls: ["<all_urls>"],    // 匹配所有 URL。
//         types: ["image"]        // 匹配图片类型，其他：
//     },
//     ["responseHeaders", "extraHeaders"]
// );

/** 添加 debugger  */
function getResponse() {
    var currentTab;
    var version = "1.0";
    chrome.tabs.query( //get current Tab
        {
            currentWindow: true,
            active: true
        },
        function (tabArray) { // 在回调函数中绑定自定义debugger方法到该页面
            currentTab = tabArray[0];
            chrome.debugger.attach({ //debug at current tab
                tabId: currentTab.id
            }, version, onAttach.bind(null, currentTab.id));
            console.log('给当前标签页绑定了debugger')
        }
    )

    function onAttach(tabId) {
        chrome.debugger.sendCommand({ //first enable the Network
            tabId: tabId
        }, "Network.enable");
        chrome.debugger.onEvent.addListener(function (debuggeeId, message, params) {
            if (currentTab.id != debuggeeId.tabId) {
                alert("currentTab.id != debuggeeId.tabId")
                return;
            }

            if (message == "Network.responseReceived") {    // params对象的类型取决于事件类型
                if (params.response && params.response.mimeType && params.response.mimeType == 'application/json') {
                    console.log('URL: %s, mimeType: %s', params.response.url, params.response.mimeType)
                    chrome.debugger.sendCommand({
                        tabId: debuggeeId.tabId
                    }, "Network.getResponseBody", { // 推测与 WebRequest.onCompleted 的 details 相同
                        "requestId": params.requestId
                    }, function (response) {        // 这个response是 getResponseBody 返回的结果
                        console.log("****************") // 这个回调函数中可以使用params对象
                        console.log(JSON.stringify(response.body))
                        // 下载json文件
                        // createFile(response.body)
                        chrome.tabs.sendMessage(debuggeeId.tabId, response.body, (response) => {
                            console.log('[Response]: %s', response)
                        })
                    });
                }
            }
        });
    }
}

/** 消息事件接收 */
chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        console.log("[MESSAGE] " + (sender.tab ? "from a content script:" + sender.tab.url : "from the extension"));
        if (request)
            console.log("[INFO] " + JSON.stringify(request));
        if (request && request.type === "debug") {
            getResponse()
            sendResponse({ farewell: "goodbye" })
        } else {
            sendResponse('对不起，听不懂你说的话')
        }
        return;
    }
)

// function createFile(str) {
//     let blob = new Blob([str], { type: 'application/json' });
//     let url = URL.createObjectURL(blob);
//     let now = new Date();

//     chrome.downloads.download({
//         url: url,
//         filename: `${now.getTime()}.json`
//     })
// }